import requests
from bs4 import BeautifulSoup
import pandas as pd
import os
from datetime import datetime
import concurrent.futures

# Функция для извлечения информации из страницы
def parse_page(url):
    response = requests.get(url)

    if response.status_code == 200:
        soup = BeautifulSoup(response.content, 'html.parser')

        title_tag = soup.find('span', class_='heading__title')
        title = title_tag.text if title_tag else None

        address_tag = soup.find('a', href='#placeMap')
        address = address_tag.text.split(': ')[1].strip() if address_tag and len(address_tag.text.split(': ')) > 1 else address_tag.text.strip() if address_tag else None

        website_tag = soup.find('a', class_='social-page-link_web')
        website = website_tag['href'] if website_tag else None

        insta_link_tag = soup.find('a', class_='social-page-link_insta')
        insta_link = insta_link_tag['href'] if insta_link_tag else None

        phone_tags = soup.find_all('meta', itemprop='telephone')
        phones = ', '.join(tag['content'] for tag in phone_tags) if phone_tags else None

        return title, address, website, insta_link, phones
    else:
        return None, None, None, None, None

# Создание папки для сохранения файла
output_folder = r'C:\Users\ogrigoryev\Desktop\Base'
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# Создание списка для хранения результатов
data = []
successfully_processed = 0

urls = []
with open('links.txt', 'r') as file:
    urls = [line.strip() for line in file]

def process_url(url):
    title, address, website, insta_link, phones = parse_page(url)
    if title:
        data.append([url, title, address, website, insta_link, phones])
        print(f"Извлечение информации из {url} завершено")
        return 1
    else:
        print(f"Не удалось получить информацию о {url}")
        return 0

# Извлечение информации параллельно
with concurrent.futures.ThreadPoolExecutor() as executor:
    results = executor.map(process_url, urls)
    successfully_processed = sum(results)

# Создание DataFrame из списка данных
df = pd.DataFrame(data, columns=['URL', 'Наименование', 'Адрес', 'Сайт', 'Инстаграм', 'Номер телефона'])

# Генерация уникального имени файла
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
file_name = f"{output_folder}\\parsed_data_{timestamp}.xlsx"

# Сохранение данных в Excel
df.to_excel(file_name, index=False)

print(f"Данные сохранены в файл: {file_name}")
print(f"Успешно обработано ссылок: {successfully_processed}/{len(urls)}")
